/***********************************************************************
 *
 * MODULE NAME:    rdabt_rfcomm_frame.h
 * PROJECT CODE:   host side stack
 * DESCRIPTION:    RFCOMM Frame Defines
 * MAINTAINER:     Dave Airlie
 * CREATION DATE:  15 March 2000
 *
 * SOURCE CONTROL: $Id: rfcomm_frame.h,v 1.1.1.1 2007/12/18 05:32:40 tianwq Exp $
 *
 * LICENSE:
 *     This source code is copyright (c) 2000-2002 RDA Microelectronics Inc.
 *     All rights reserved.
 *
 ***********************************************************************/

#include "host_config.h"

#ifndef RDABT_RFCOMM_FRAME_H
#define RDABT_RFCOMM_FRAME_H

#define RDABT_RFCOMM_EA_BIT 1
#define RDABT_RFCOMM_CR_BIT 2

#define RDABT_RFCOMM_FR_ADDR_FIELD 0
#define RDABT_RFCOMM_FR_CTRL_FIELD 1
#define RDABT_RFCOMM_FR_LENGTH_FIELD1 2
#define RDABT_RFCOMM_FR_LENGTH_FIELD2 3

#define RDABT_RFCOMM_FR_CTRL_SABM 0x2F
#define RDABT_RFCOMM_FR_CTRL_UA 0x63
#define RDABT_RFCOMM_FR_CTRL_DM 0x0F
#define RDABT_RFCOMM_FR_CTRL_DISC 0x43
#define RDABT_RFCOMM_FR_CTRL_UIH 0xEF

/* Size of buffer for a frame */
#define RDABT_RFCOMM_FR_BUFSIZE 3
#define RDABT_RFCOMM_FR_CTRL_PF_BIT (1<<4)

/* Values for Control Channel Type field from TS 07.10 5.4.6.3 */
/* These are in the same order as the spec */
#define RDABT_RFCOMM_CC_TYPE_PN 0x80
#define RDABT_RFCOMM_CC_TYPE_TEST 0x20
#define RDABT_RFCOMM_CC_TYPE_FCON 0xA0
#define RDABT_RFCOMM_CC_TYPE_FCOFF 0x60
#define RDABT_RFCOMM_CC_TYPE_MSC 0xE0
#define RDABT_RFCOMM_CC_TYPE_NSC 0x10
#define RDABT_RFCOMM_CC_TYPE_RPN 0x90
#define RDABT_RFCOMM_CC_TYPE_RLS 0x50

#define RDABT_RFCOMM_CC_TYPE_FIELD 0
#define RDABT_RFCOMM_CC_LENGTH_FIELD 1

/* length fields for host buffer allocation */
#define RDABT_RFCOMM_EXTRA_FRAME_LEN 4
#define RDABT_RFCOMM_CC_HEAD_LEN 2

/* Length of Control Channel Message (not including headers) */
#define RDABT_RFCOMM_CC_PN_LEN 8
#define RDABT_RFCOMM_CC_RPN_LEN_REQ 1
#define RDABT_RFCOMM_CC_RPN_LEN_COMM 8
#define RDABT_RFCOMM_CC_MSC_SHORT_LEN 2
#define RDABT_RFCOMM_CC_MSC_LONG_LEN 3
#define RDABT_RFCOMM_CC_LSR_LEN 2
#define RDABT_RFCOMM_CC_PN_LEN 8
#define RDABT_RFCOMM_CC_NSC_LEN 1
#define RDABT_RFCOMM_CC_FCON_LEN 0
#define RDABT_RFCOMM_CC_FCOFF_LEN 0

#define RDABT_RFCOMM_CC_CR_RESP 0
#define RDABT_RFCOMM_CC_CR_COMM 1

/* DLC Parameter negotiation PN */
#define RDABT_RFCOMM_CC_PN_DLCI 2
#define RDABT_RFCOMM_CC_PN_CLBITS 3
#define RDABT_RFCOMM_CC_PN_FRAME_SIZE1 6
#define RDABT_RFCOMM_CC_PN_FRAME_SIZE2 7
#define RDABT_RFCOMM_CC_PN_KBITS 9

#define RDABT_RFCOMM_CC_PN_CREDIT_FLOW_REQ 0x0F
#define RDABT_RFCOMM_CC_PN_CREDIT_FLOW_RESP 0x0E

/* MSC */
#define RDABT_RFCOMM_CC_MSC_DLCI 2
#define RDABT_RFCOMM_CC_MSC_BITS 3
#define RDABT_RFCOMM_CC_MSC_BREAK 4

#define RDABT_RFCOMM_CC_MSC_CSF_FC (1<<1)
#define RDABT_RFCOMM_CC_MSC_CSF_RTC (1<<2)
#define RDABT_RFCOMM_CC_MSC_CSF_RTR (1<<3)
#define RDABT_RFCOMM_CC_MSC_CSF_IC (1<<6)
#define RDABT_RFCOMM_CC_MSC_CSF_DV (1<<7)

#define RDABT_RFCOMM_CC_MSC_BS_B1 2

/* RPN */
#define RDABT_RFCOMM_CC_RPN_DLCI 2
#define RDABT_RFCOMM_CC_RPN_BAUD 3
#define RDABT_RFCOMM_CC_RPN_DSPB 4
#define RDABT_RFCOMM_CC_RPN_FLC 5
#define RDABT_RFCOMM_CC_RPN_XON 6
#define RDABT_RFCOMM_CC_RPN_XOFF 7
#define RDABT_RFCOMM_CC_RPN_PM1 8
#define RDABT_RFCOMM_CC_RPN_PM2 9

#define RDABT_RFCOMM_CC_RPN_B_2400 0
#define RDABT_RFCOMM_CC_RPN_B_4800 1
#define RDABT_RFCOMM_CC_RPN_B_7200 2
#define RDABT_RFCOMM_CC_RPN_B_9600 3
#define RDABT_RFCOMM_CC_RPN_B_19200 4
#define RDABT_RFCOMM_CC_RPN_B_38400 5
#define RDABT_RFCOMM_CC_RPN_B_57600 6
#define RDABT_RFCOMM_CC_RPN_B_115200 7
#define RDABT_RFCOMM_CC_RPN_B_230400 8 

#define RDABT_RFCOMM_CC_RPN_B_DEF RDABT_RFCOMM_CC_RPN_B_9600

#define RDABT_RFCOMM_CC_RPN_D_5 0
#define RDABT_RFCOMM_CC_RPN_D_6 2
#define RDABT_RFCOMM_CC_RPN_D_7 1
#define RDABT_RFCOMM_CC_RPN_D_8 3

#define RDABT_RFCOMM_CC_RPN_D_DEF RDABT_RFCOMM_CC_RPN_D_8

#define RDABT_RFCOMM_CC_RPN_PT_ODD 0
#define RDABT_RFCOMM_CC_RPN_PT_EVEN 2<<5
#define RDABT_RFCOMM_CC_RPN_PT_MARK 1<<5
#define RDABT_RFCOMM_CC_RPN_PT_SPACE 3<<5

#define RDABT_RFCOMM_CC_RPN_FLC_IXON 1
#define RDABT_RFCOMM_CC_RPN_FLC_OXON 2
#define RDABT_RFCOMM_CC_RPN_FLC_IRTR 4
#define RDABT_RFCOMM_CC_RPN_FLC_ORTR 8
#define RDABT_RFCOMM_CC_RPN_FLC_IRTC 16
#define RDABT_RFCOMM_CC_RPN_FLC_ORTC 32

#define RDABT_RFCOMM_CC_RPN_PM_BITRATE 0x0001
#define RDABT_RFCOMM_CC_RPN_PM_DATABITS 0x0002
#define RDABT_RFCOMM_CC_RPN_PM_STOPBITS 0x0004
#define RDABT_RFCOMM_CC_RPN_PM_PARITY 0x0008
#define RDABT_RFCOMM_CC_RPN_PM_PARITY_TYPE 0x0010
#define RDABT_RFCOMM_CC_RPN_PM_XON_CH 0x0020
#define RDABT_RFCOMM_CC_RPN_PM_XOFF_CH 0x0040

#define RDABT_RFCOMM_CC_RPN_PM_RESV1 0x0080

#define RDABT_RFCOMM_CC_RPN_PM_XONXOFF_INPUT 0x0100
#define RDABT_RFCOMM_CC_RPN_PM_XONXOFF_OUTPUT 0x0200
#define RDABT_RFCOMM_CC_RPN_PM_RTR_INPUT 0x0400
#define RDABT_RFCOMM_CC_RPN_PM_RTR_OUTPUT 0x0800
#define RDABT_RFCOMM_CC_RPN_PM_RTC_INPUT 0x1000
#define RDABT_RFCOMM_CC_RPN_PM_RTC_OUTPUT 0x2000

#define RDABT_RFCOMM_CC_LSR_DLCI 2

#define RDABT_RFCOMM_DEF_DLC_PRI 15
#define RDABT_RFCOMM_CTRL_DLC 0

#endif

